@use 'sass:color';
@use 'sass:math';

@use '../tools/colors';
@use '../tools/variables';

$modal--background: colors.$another-grey;

$modal--heading--foreground: #e6f0ff;

$modal--sub-heading--foreground: color.adjust(
  color.adjust($modal--heading--foreground, $lightness: -15%),
  $saturation: -15%
);

$modal--transition--duration: 0.2s;
$modal--transition--scale: 0.85;

$modal--body--foreground: color.adjust(#6c7e92, $lightness: 6%);

$modal--tab--foreground: #abc2e2;
$modal--tab--foreground--active: colors.$blue--lighter;
$modal--tab--border--active: colors.$blue--lighter;

$modal--overlay--base: #0b1014;
$modal--overlay: rgba($modal--overlay--base, 0.95);

$modal--content--shadow: #05080a;

$modal--border: #363e48;
$modal--border-radius: 3px;
$modal--padding--horizontal: variables.$spacing-unit;
$modal--padding--vertical: math.div($modal--padding--horizontal * 4, 5);

$modal--content--padding--top: math.div(variables.$spacing-unit * 4, 5);
$modal--content--padding--right: variables.$spacing-unit;
$modal--content--padding--bottom: math.div(variables.$spacing-unit * 4, 5);
$modal--content--padding--left: variables.$spacing-unit;

$modal--actions--margin--top: variables.$spacing-unit;

$modal--tabs--margin--top: math.div(variables.$spacing-unit * 1, 5);
$modal--tabs--margin--right: math.div(variables.$spacing-unit * -1, 5);
$modal--tabs--margin--bottom: 0;
$modal--tabs--margin--left: math.div(variables.$spacing-unit * -1, 5);

$modal--vertical--tabs--margin--top: math.div(variables.$spacing-unit * 1, 5);
$modal--vertical--tabs--margin--right: 0;
$modal--vertical--tabs--margin--bottom: 0;
$modal--vertical--tabs--margin--left: $modal--padding--horizontal * -1;

$modal--tabs--padding--top: math.div(variables.$spacing-unit * 1, 5);
$modal--tabs--padding--right: math.div(variables.$spacing-unit * 1, 5);
$modal--tabs--padding--bottom: math.div(variables.$spacing-unit * 2, 5);
$modal--tabs--padding--left: math.div(variables.$spacing-unit * 1, 5);

$modal--tabs--padding--vertical--top: math.div(variables.$spacing-unit * 1, 5);
$modal--tabs--padding--vertical--right: math.div(variables.$spacing-unit * 2, 5);
$modal--tabs--padding--vertical--bottom: math.div(variables.$spacing-unit * 1, 5);
$modal--tabs--padding--vertical--left: $modal--padding--horizontal;

.modal {
  height: 100%;
  left: 0;
  position: fixed;
  top: 0;
  transition: opacity $modal--transition--duration;
  width: 100%;
  z-index: 100;

  &__overlay {
    background: $modal--overlay;
    height: 100%;
    width: 100%;
  }

  &--align-center {
    text-align: center;
  }

  &__tabs {
    color: $modal--tab--foreground;
    font-size: 0.85rem;
    font-weight: 500;
    margin: $modal--tabs--margin--top $modal--tabs--margin--right $modal--tabs--margin--bottom
      $modal--tabs--margin--left;

    .modal {
      &__tab {
        display: inline-block;
        margin-right: math.div(variables.$spacing-unit * 2, 5);
        position: relative;

        > button {
          padding: $modal--tabs--padding--top $modal--tabs--padding--right $modal--tabs--padding--bottom
            $modal--tabs--padding--left;
        }

        &:after {
          bottom: 0;
          content: '';
          height: 1px;
          left: 0;
          position: absolute;
          right: 0;
          transition: background 0.25s;
        }

        &:last-child {
          margin-right: 0;
        }

        &.is-active {
          color: $modal--tab--foreground--active;
          font-weight: 700;

          &:after {
            background: $modal--tab--border--active;
          }
        }
      }
    }
  }

  &__header {
    border-radius: $modal--border-radius $modal--border-radius 0 0;
    color: $modal--heading--foreground;
    box-shadow: inset 0 -1px 0 $modal--border;
    flex: 0 0 auto;
    font-size: 1.25em;
    font-weight: 500;
    overflow: hidden;
    padding: $modal--padding--vertical $modal--padding--horizontal;

    &.has-tabs {
      .modal--tabs-in-header & {
        padding-bottom: 0;
      }
    }
  }

  &__content {
    flex: 1 1 auto;
    padding: $modal--content--padding--top $modal--content--padding--right $modal--content--padding--bottom
      $modal--content--padding--left;
    position: relative;

    &__wrapper {
      background: $modal--background;
      border-radius: $modal--border-radius;
      box-shadow: 0 0 256px rgba($modal--content--shadow, 0.1), 0 2px 4px rgba($modal--content--shadow, 0.5),
        0 2px 8px rgba($modal--content--shadow, 0.1), 0 4px 32px rgba($modal--content--shadow, 0.3);
      display: flex;
      flex-direction: column;
      height: auto;
      left: 50%;
      max-height: 80%;
      max-width: 80%;
      overflow: hidden;
      position: absolute;
      top: 10%;
      transition: transform $modal--transition--duration;
      transform: translate(-50%, 0);
      transform-origin: 50% 50%;
      min-width: 500px;

      @media (max-width: 720px) {
        max-width: 100%;
        height: 80%;
        width: 100%;
        top: unset;
        bottom: 0%;
        min-width: unset;
      }
    }

    &--nested-scroll {
      overflow: hidden !important;
      padding: 0;
      position: relative;

      &__header {
        padding-left: $modal--content--padding--left;
        padding-right: $modal--content--padding--right;
      }

      &__content {
        padding: $modal--content--padding--top $modal--content--padding--right $modal--content--padding--bottom
          $modal--content--padding--left;
      }
    }
  }

  &__body {
    color: $modal--body--foreground;
    flex: 1 1 auto;
    font-size: 0.9em;
    overflow: auto;
    overflow-x: hidden;

    .modal--tabs-in-body & {
      overflow: hidden;
    }
  }

  &__footer {
    flex: 0 0 auto;
    padding: 0 $modal--padding--horizontal $modal--padding--vertical $modal--padding--horizontal;

    .modal {
      &__actions {
        margin-top: 0;
      }
    }
  }

  &__actions {
    margin-top: $modal--actions--margin--top;
  }

  &__button-group {
    align-items: center;
    display: flex;
    justify-content: flex-end;

    .modal--align-center & {
      justify-content: center;
    }
  }

  &__animation-enter {
    opacity: 0;

    .modal {
      &__content {
        &__wrapper {
          transform: translate(-50%, 0) scale($modal--transition--scale);
        }
      }
    }
  }

  &__animation-enter-active {
    opacity: 1;

    .modal {
      &__content {
        &__wrapper {
          transform: translate(-50%, 0) scale(1, 1);
        }
      }
    }
  }

  &__animation-exit {
    opacity: 1;
    pointer-events: none;

    .modal {
      &__content {
        &__wrapper {
          transform: translate(-50%, 0) scale(1, 1);
        }
      }
    }
  }

  &__animation-exit-active {
    opacity: 0;

    .modal {
      &__content {
        &__wrapper {
          transform: translate(-50%, 0) scale($modal--transition--scale);
        }
      }
    }
  }

  &--vertical {
    &.modal {
      &--tabs-in-header {
        flex-direction: row;

        .modal {
          &__header {
            border-radius: $modal--border-radius 0 0 $modal--border-radius;
            flex-basis: 175px;
            box-shadow: inset -1px 0 0 $modal--border;
            padding-bottom: $modal--padding--horizontal;
            padding-right: 0;
            max-width: 175px;
          }

          &__content {
            flex: 1 0 auto;

            & + .modal__footer {
              margin-top: math.div(variables.$spacing-unit * 3, 5);
            }
          }
        }
      }

      &--tabs-in-body {
        .modal {
          &__body {
            display: flex;
            flex: 1 1 auto;
            flex-direction: row;
          }

          &__content {
            overflow: auto;
            overflow-x: hidden;
          }

          &__tabs {
            flex: 0 0 135px;
            box-shadow: inset -1px 0 $modal--border;
            margin: 0;
            padding-top: $modal--padding--vertical;
          }
        }
      }
    }

    .modal {
      &__tabs {
        margin: $modal--vertical--tabs--margin--top $modal--vertical--tabs--margin--right
          $modal--vertical--tabs--margin--bottom $modal--vertical--tabs--margin--left;

        .modal {
          &__tab {
            display: block;
            margin-right: 0;

            > button {
              width: 100%;
              padding: $modal--tabs--padding--vertical--top $modal--tabs--padding--vertical--right
                $modal--tabs--padding--vertical--bottom $modal--tabs--padding--vertical--left;
              text-align: left;
            }

            &:after {
              bottom: 0;
              content: '';
              height: auto;
              left: auto;
              position: absolute;
              right: 0;
              top: 0;
              transition: background 0.25s;
              width: 1px;
            }
          }
        }
      }

      &__body {
        display: flex;
        flex-direction: column;
      }

      &__content {
        display: flex;
        flex-direction: column;
      }

      &__actions {
        flex: 0 0 auto;
      }
    }
  }

  &--size {
    &-large {
      width: 850px;

      &.modal {
        &__content {
          &__wrapper {
            bottom: 10%;

            @media (max-width: 720px) {
              bottom: 0%;
            }
          }
        }
      }
    }
  }

  .form {
    &__section {
      &__heading {
        color: $modal--heading--foreground;
        font-size: 0.925em;
        font-weight: 500;
      }

      &__sub-heading {
        color: $modal--sub-heading--foreground;
        font-size: 0.875em;
      }
    }
  }
}
